using System;
using System.Collections.Generic;
using System.Data.Odbc;
using Gestion_Api.AccesoDatos;
using System.Data.SqlClient;
using System.Data;


namespace Escuela
{
    public class Cursable
    {
        protected int id;
        protected Materia materia = new Materia();
        protected Profesor profesor = new Profesor();
        protected List<Alumno> alumnos=new List<Alumno>();
        protected DateTime fechaInicio;
        protected DateTime fechaFin;
        protected string horaInicio;
        protected string horaFin;
        protected string dia;
        protected string observacion;
        protected decimal costo;
        protected int cupos;
        protected int cuposLibres;
        protected string aula;
        protected string activo;
        protected List<Clase> clases = new List<Clase>();
        
        
        #region getters y setters

        public int Id
        {
            get { return id; }
            set { id = value; }
        }
        

        public Materia Materia
        {
            get { return materia; }
            set { materia = value; }
        }
        

        public Profesor Profesor
        {
            get { return profesor; }
            set { profesor = value; }
        }
        

        public List<Alumno> Alumnos
        {
            get { return alumnos; }
            set { alumnos = value; }
        }
        

        public DateTime FechaInicio
        {
            get { return fechaInicio; }
            set { fechaInicio = value; }
        }
        

        public DateTime FechaFin
        {
            get { return fechaFin; }
            set { fechaFin = value; }
        }
        

        public string HoraInicio
        {
            get { return horaInicio; }
            set { horaInicio = value; }
        }
        

        public string HoraFin
        {
            get { return horaFin; }
            set { horaFin = value; }
        }
        

        public string Dia
        {
            get { return dia; }
            set { dia = value; }
        }
        

        public string Observacion
        {
            get { return observacion; }
            set { observacion = value; }
        }
        

        public decimal Costo
        {
            get { return costo; }
            set { costo = value; }
        }
        

        public int Cupos
        {
            get { return cupos; }
            set { cupos = value; }
        }
        

        public int CuposLibres
        {
            get { return cuposLibres; }
            set { cuposLibres = value; }
        }
        

        public string Aula
        {
            get { return aula; }
            set { aula = value; }
        }
        

        public string Activo
        {
            get { return activo; }
            set { activo = value; }
        }
        #endregion

        public void agregarAlumno(Alumno alumno)
        {
            //Genero la clase de conexion
            AccesoDB ad = new AccesoDB();

            //doy de alta el cursable
            //genero query
            string query = "coop_cursable_alumno_Insert ";
            query +=  + this.Id + ", ";
            query += "'" + alumno.id + "'";
            

            //agrego el cursable a la DB
            //int resp = ad.ejecQuery(query);

            SqlCommand command = new SqlCommand();
            //command.Connection = connection;
            command.CommandText = query;
            command.CommandType = CommandType.Text;

            int resp = ad.ejecQueryResp(command);

        }

        public void quitarAlumno(Alumno alumno)
        {
            //Genero la clase de conexion
            AccesoDB ad = new AccesoDB();

            //doy de alta el cursable
            //genero query
            string query = "coop_cursable_alumno_Delete ";
            query += +this.Id + ", ";
            query += "'" + alumno.id + "'";


            //ejecuto consulta
            //int resp = ad.ejecQuery(query);

            SqlCommand command = new SqlCommand();
            //command.Connection = connection;
            command.CommandText = query;
            command.CommandType = CommandType.Text;

            int resp = ad.ejecQueryResp(command);

        }

        public void quitarAlumnoConPago(Alumno alumno)
        {
            //doy de baja los pagos


        }

        public bool HayAlumnos()
        {
            AccesoDB ad = new AccesoDB();

            //Controlo que no tenga alumnos
            string query1 = "select count(*) from cursable_alumno where id_cursable = '" + this.id + "'";

            SqlCommand command = new SqlCommand();
            //command.Connection = connection;
            command.CommandText = query1;
            command.CommandType = CommandType.Text;

            //Ejecuto query y lo cargo en un data reader
            DataTable dt = ad.execDT(command);
            int cant = 0;
            foreach (DataRow dr in dt.Rows)
            {
                cant = Convert.ToInt32(dr[0]);
            }

            if (cant == 0)
            {
                return false;
            }
            return true;
        }

        public int ModificarDB()
        {

            //Genero la clase de conexion
            AccesoDB ad = new AccesoDB();

            //doy de alta el cursable
            //genero query
            string query = "coop_cursable_Update";
            query += "'" + this.id + "', ";
            query += "'" + this.costo + "', ";
            query += "'" + this.cupos + "', ";
            query += "'" + this.cuposLibres + "', ";
            query += "'" + this.aula + "', ";
            query += "'" + this.HoraFin + "', ";
            query += "'" + this.HoraInicio + "'";
            //query += "'" + cu.FechaFin.ToString("yyyyMMdd") + "', ";
            //query += "'" + cu.FechaInicio.ToString("yyyyMMdd") + "', ";
            //query += "'" + cu.Observacion + "', ";
            //query += "'" + idMateria + "', ";
            //query += "'" + pr.id + "'";

            SqlCommand command = new SqlCommand();
            //command.Connection = connection;
            command.CommandText = query;
            command.CommandType = CommandType.Text;

            //agrego el cursable a la DB
            //int resp = ad.ejecQuery(query);

            int resp = ad.ejecQueryResp(command);

            ad.DesConectar();

            ////obtengo el id del registro que ingrese
            //int lastId = this.obtenerUltimoCurso();

            ////doy de alta en curso el nuevo cursable
            //query = "coop_curso_Insert";
            //query += "'" + cu.matricula + "', ";
            //query += "'" + lastId + "'";

            ////resp = ad.ejecQuery(query);
            ////reasigno texto
            //command.CommandText = query;
            //resp = ad.ejecQueryResp(command);



            //ad.DesConectar();
            ////Genero las clases del curso
            //this.darAltaClases(cu.FechaInicio, cu.FechaFin, pr, lastId);

            return resp;

        }

        public bool sosCurso(int id)
        {
            //Genero la clase de conexion
            AccesoDB ad = new AccesoDB();

            //doy de alta el cursable
            //genero query
            string query = "coop_curso_GetOne ";
            query += id;

            SqlCommand command = new SqlCommand();
            //command.Connection = connection;
            command.CommandText = query;
            command.CommandType = CommandType.Text;

            //Ejecuto query y lo cargo en un data reader
            SqlDataReader dr = ad.ExecuteReader(command);

            //SqlDataReader dr = ad.ExecuteReader(query);

            int resp = 0;

            if(dr.HasRows)
            {
            
                return true;
            }
            else
            {
                return false;
            }
        }
 
    }
}